package individual.ircon.bilibili.ui;

import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.control.*;

import java.net.URL;
import java.util.ResourceBundle;

public class DanmuLottery implements Initializable {
    @FXML
    private TableView<DanmuData> Table;
    @FXML
    private TextField RoomID;
    @FXML
    private TextField KeyWord;
    @FXML
    private RadioButton SelectAll;
    @FXML
    private RadioButton SelectContain;

    @FXML
    private CallBack StartCall;
    @FXML
    private CallBack StopCall;
    @FXML
    private CallBack LotteryCall;

    @FXML
    private Button Start;
    @FXML
    private Button Stop;


    @Override
    public void initialize(URL location, ResourceBundle resources) {

        /// 按钮单选
        ToggleGroup group = new ToggleGroup();
        SelectAll.setToggleGroup(group);
        SelectContain.setToggleGroup(group);
        SelectAll.setSelected(true);

        /// 表格的数据解析
        TableColumn<DanmuData, String> column1 = new TableColumn<>("用户ID");
        column1.setCellValueFactory(param -> param.getValue().userIDProperty().asString());

        TableColumn<DanmuData, String> column2 = new TableColumn<>("用户昵称");
        column2.setCellValueFactory(param -> param.getValue().userNameProperty());

        TableColumn<DanmuData, String> column3 = new TableColumn<>("弹幕内容");
        column3.setCellValueFactory(param -> param.getValue().danmuProperty());

        Table.getColumns().setAll(column1, column2, column3);

    }

    /**
     * 设置数据表格里面的数据。
     *
     * @param list 队列对象。
     */
    public void setList(ObservableList<DanmuData> list) {
        Table.setItems(list);
    }

    public ObservableList<DanmuData> getList() {
        return Table.getItems();
    }

    /**
     * 获取加载器。
     *
     * @return 加载器对象。
     */
    public static FXMLLoader getLoader() {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(DanmuLottery.class.getResource("DanmuLottery.fxml"));
        loader.setBuilderFactory(new JavaFXBuilderFactory());
        return loader;
    }

    /**
     * 房间ID。
     *
     * @return ID的字符串。
     */
    public String getRoomID() {
        return RoomID.getText();
    }

    /**
     * 获取关键字。
     *
     * @return 关键字
     */
    public String getKeyWord() {
        return KeyWord.getText();
    }

    /**
     * 弹幕签到内容是否需要全匹配。
     *
     * @return 是否全匹配
     */
    public boolean isAllCheck() {
        return SelectAll.isSelected();
    }

    /**
     * 开始按钮的回调。
     *
     * @param startCall 回调对象
     */
    public void setStartCall(CallBack startCall) {
        StartCall = startCall;
    }

    /**
     * 停止按钮的回调
     *
     * @param stopCall 回调对象
     */
    public void setStopCall(CallBack stopCall) {
        StopCall = stopCall;
    }


    /**
     * 抽奖按钮的回调。
     *
     * @param lotteryCall 回调对象
     */
    public void setLotteryCall(CallBack lotteryCall) {
        LotteryCall = lotteryCall;
    }

    /**
     * 设置状态。0，结束按钮无效。1，开始按钮无效。
     *
     * @param state 状态码
     */
    public void setState(int state) {
        if (state == 0) {
            Stop.setDisable(true);
            Start.setDisable(false);
            RoomID.setDisable(false);
            KeyWord.setDisable(false);
        } else if (state == 1) {
            Stop.setDisable(false);
            Start.setDisable(true);
            RoomID.setDisable(true);
            KeyWord.setDisable(true);
        }
    }

    /**
     * 开始按钮。
     */
    @FXML
    private void ClickStart() {
        if (StartCall != null)
            StartCall.call();
    }

    /**
     * 抽奖按钮
     */
    @FXML
    private void ClickLottery() {
        if (LotteryCall != null)
            LotteryCall.call();
    }

    /**
     * 停止按钮
     */
    @FXML
    private void ClickStop() {
        if (StopCall != null)
            StopCall.call();
    }

    /**
     * 清空按钮
     */
    @FXML
    private void ClickClear() {
        if (Table != null) {
            var list = Table.getItems();
            if (list != null) list.clear();
        }
    }

    /**
     * 自定义的回调。
     */
    interface CallBack {
        void call();
    }
}
